module.exports = class Scope {
    /**
     * 分析函数的作用域
     * @param {Scope} parent 父级作用域
     * @param {Array} params 函数的参数
     * @param {string} name 当前作用域的名字
     */
    constructor({name = "", parent, params = []} = {}) {
        this.parent = parent;
        this.names = params;
        this.name = name;
    }

    /**
     * 将变量添加到当前作用域
     * @param {string} name 变量名
     */
    add(name) { this.names.push(name) }

    /**
     * 返回变量所在的作用域
     * @param {string} name 变量名
     * @returns Scope作用域名 | null
     */
    findDefiningScope(name) {
        if(this.names.includes(name)) {
            return this;
        }
        else if(this.parent) {
            return this.parent.findDefiningScope(name)
        }
        return null;
    }
}